<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>姓名案例_methods实现</title>
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
    <!--
      计算属性:
        1.定义:要用的属性不存在，要通过已有属性计算得来。
        2.原理:底层借助了0bjcet.defineproperty方法提供的getter和setter。
        3.get函数什么时候执行?
        (1).初次读取时会执行一次。(2),当依赖的数据发生改变时会被再次调用。
          set函数在什么时候执行? 只有在fullName被修改时触发执行
        4.优势:与methods实现相比，内部有缓存机制(复用)，效率更高，调试方便。
        5.备注:
        1.计算属性最终会出现在vm上，直接读取使用即可。
        2.如果计算属性要被修改，那必须写set函数去响应修改，且set中要引起计算时依赖的数据发生改变
    -->
     <div id = "name">
        姓：<input type="text" v-model:value="firstName"></input><br/> <!---双向绑定对data进行数据修改-->
        名：<input type="text" v-model:value="lastName"></input><br/>
        姓名：<span>{{fullName}}</span> <!--在fullName初次读取值时会有缓存下来-->
        姓名：<span>{{fullName}}</span> <!--读取缓存-->
        姓名：<span>{{fullName}}</span> 
     </div>
     <script>
        const vm = new Vue({
            el: '#name',
            data:function(){
                return {
                    firstName:'张',
                    lastName:'三'
                }
            },
            computed:{
                fullName:{ //此时fullName会被放在vm中且取值为get()方法的反回值，而不需要使用fullName.get()去调用
                    get(){
                        console.log(this) //此处的this就是vm
                        return this.firstName +'-'+this.lastName
                    },
                    set(value){
                        const arr = value.split('-')
                        this.firstName = arr[0]
                        this.lastName = arr[1]
                    }
                }
            }
        })
     </script>
</body>
</html>